#!/bin/bash

############################
# USER CONFIG — EDIT THESE #
############################

SERVER_IP="IP"
SSH_USER="user"
RDP_USER="user"
RDP_PASS="pass"
RDP_DOMAIN=""          # leave empty if none
SSH_PORT="22"

############################
# ADVANCED / TUNING       #
############################

LOCAL_RDP_PORT=13389
RDP_RESOLUTION="1280x720"   # lower = less bandwidth
COLOR_DEPTH="16"            # 16 or 15 recommended
LOGFILE="$HOME/.rdp_tunnel.log"

############################
# START                   #
############################

echo "[*] Starting SSH tunnel..." | tee -a "$LOGFILE"

# Kill existing tunnel if stuck
pkill -f "ssh.*$LOCAL_RDP_PORT:localhost:3389" 2>/dev/null

ssh -f -N \
  -L ${LOCAL_RDP_PORT}:localhost:3389 \
  -p ${SSH_PORT} \
  -o ExitOnForwardFailure=yes \
  -o ServerAliveInterval=30 \
  -o ServerAliveCountMax=3 \
  ${SSH_USER}@${SERVER_IP}

if [ $? -ne 0 ]; then
  echo "[!] SSH tunnel failed" | tee -a "$LOGFILE"
  exit 1
fi

echo "[*] SSH tunnel established" | tee -a "$LOGFILE"
sleep 1

echo "[*] Launching RDP..." | tee -a "$LOGFILE"

xfreerdp \
  /v:localhost:${LOCAL_RDP_PORT} \
  /u:${RDP_USER} \
  /p:${RDP_PASS} \
  ${RDP_DOMAIN:+/d:$RDP_DOMAIN} \
  /size:${RDP_RESOLUTION} \
  /bpp:${COLOR_DEPTH} \
  /network:modem \
  /compression \
  /gfx:off \
  /rfx \
  /sound:sys:pulse \
  /microphone:sys:pulse \
  /video \
  /clipboard \
  /cert:ignore \
  /auto-reconnect \
  /auto-reconnect-max-retries:20 \
  +fonts -wallpaper -themes -aero -decorations

echo "[*] RDP session ended" | tee -a "$LOGFILE"

# Cleanup tunnel
pkill -f "ssh.*$LOCAL_RDP_PORT:localhost:3389"

